{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "#评价指标\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "#用于显示\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train = pd.read_csv(\"./RentListingInquries_FE_train.csv\")\n",
    "test = pd.read_csv(\"./RentListingInquries_FE_test.csv\")\n",
    "train = train[:2000]\n",
    "test = test[:1000]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 2000 entries, 0 to 1999\n",
      "Columns: 228 entries, bathrooms to interest_level\n",
      "dtypes: float64(9), int64(219)\n",
      "memory usage: 3.5 MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "\n",
    "X_train = train.drop(['interest_level'],axis=1)\n",
    "# X_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5,shuffle=True,random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一轮参数调整得到的n_estimators最优值（47），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [3, 5, 7, 9], 'min_child_weight': [1, 3, 5]}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth,min_child_weight = min_child_weight)\n",
    "param_test2_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\train\\Anaconda2\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.69064, std: 0.01328, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       "  mean: -0.68960, std: 0.01311, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       "  mean: -0.69258, std: 0.00976, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       "  mean: -0.69512, std: 0.01507, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.69784, std: 0.01396, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.69589, std: 0.01301, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.70363, std: 0.02142, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       "  mean: -0.69961, std: 0.01829, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.69356, std: 0.01137, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.70209, std: 0.02152, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       "  mean: -0.70229, std: 0.00729, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       "  mean: -0.69465, std: 0.01353, params: {'max_depth': 9, 'min_child_weight': 5}],\n",
       " {'max_depth': 3, 'min_child_weight': 3},\n",
       " -0.68959931282140319)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "    learning_rate = 0.1,\n",
    "    n_estimators = 47,\n",
    "    max_depth=5,\n",
    "    min_child_weight=1,\n",
    "    gamma=0,\n",
    "    subsample=0.3,\n",
    "    colsample_bytree=0.8,\n",
    "    colsample_bylevel=0.7,\n",
    "    objective='multi:softprob',\n",
    "    seed=3)\n",
    "gsearch2_1 = GridSearchCV(xgb2_1,param_grid=param_test2_1,scoring='neg_log_loss',n_jobs=-1,cv=kfold)\n",
    "gsearch2_1.fit(X_train,y_train)\n",
    "\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_, gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\train\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\train\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\train\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\train\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\train\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\train\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\train\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 1.39679999,  1.65679998,  1.64299998,  2.34039998,  2.32460003,\n",
       "         2.29380007,  2.99139996,  2.91199999,  2.78539987,  3.51540008,\n",
       "         3.34680004,  2.852     ]),\n",
       " 'mean_score_time': array([ 0.01880007,  0.02100005,  0.01559997,  0.01660008,  0.0164    ,\n",
       "         0.01919999,  0.01940002,  0.0198    ,  0.01740012,  0.01939993,\n",
       "         0.01859999,  0.01639996]),\n",
       " 'mean_test_score': array([-0.69064267, -0.68959931, -0.69258394, -0.69512496, -0.69784315,\n",
       "        -0.69589284, -0.70363469, -0.69960967, -0.69355617, -0.70209186,\n",
       "        -0.70229238, -0.69464805]),\n",
       " 'mean_train_score': array([-0.59431977, -0.60170296, -0.60898291, -0.48045793, -0.51230039,\n",
       "        -0.53790561, -0.38890505, -0.45639884, -0.50093617, -0.33809584,\n",
       "        -0.43103881, -0.49073217]),\n",
       " 'param_max_depth': masked_array(data = [3 3 3 5 5 5 7 7 7 9 9 9],\n",
       "              mask = [False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_min_child_weight': masked_array(data = [1 3 5 1 3 5 1 3 5 1 3 5],\n",
       "              mask = [False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'max_depth': 3, 'min_child_weight': 1},\n",
       "  {'max_depth': 3, 'min_child_weight': 3},\n",
       "  {'max_depth': 3, 'min_child_weight': 5},\n",
       "  {'max_depth': 5, 'min_child_weight': 1},\n",
       "  {'max_depth': 5, 'min_child_weight': 3},\n",
       "  {'max_depth': 5, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 1},\n",
       "  {'max_depth': 7, 'min_child_weight': 3},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 9, 'min_child_weight': 1},\n",
       "  {'max_depth': 9, 'min_child_weight': 3},\n",
       "  {'max_depth': 9, 'min_child_weight': 5}],\n",
       " 'rank_test_score': array([ 2,  1,  3,  6,  8,  7, 12,  9,  4, 10, 11,  5]),\n",
       " 'split0_test_score': array([-0.68723959, -0.68379366, -0.68302708, -0.69185491, -0.69230719,\n",
       "        -0.68604309, -0.70271417, -0.68955728, -0.68518645, -0.69098968,\n",
       "        -0.68925739, -0.6811857 ]),\n",
       " 'split0_train_score': array([-0.58968611, -0.60027882, -0.60738571, -0.48275363, -0.51750932,\n",
       "        -0.54060863, -0.39106424, -0.4552482 , -0.49899663, -0.33405572,\n",
       "        -0.43165125, -0.49371752]),\n",
       " 'split1_test_score': array([-0.68806521, -0.6897287 , -0.69436487, -0.69298255, -0.69868571,\n",
       "        -0.70028267, -0.69000568, -0.70674271, -0.69656763, -0.70471747,\n",
       "        -0.7078981 , -0.69833728]),\n",
       " 'split1_train_score': array([-0.59282349, -0.60100682, -0.60855019, -0.48445004, -0.5178399 ,\n",
       "        -0.53940059, -0.39365874, -0.46042193, -0.50921261, -0.33950892,\n",
       "        -0.4359575 , -0.48979116]),\n",
       " 'split2_test_score': array([-0.67139999, -0.6709966 , -0.68150107, -0.67051717, -0.67447554,\n",
       "        -0.68123607, -0.67637605, -0.67036461, -0.68120301, -0.66735333,\n",
       "        -0.69994446, -0.68101108]),\n",
       " 'split2_train_score': array([-0.60150378, -0.60862468, -0.61514442, -0.48074028, -0.51097483,\n",
       "        -0.5396531 , -0.39647988, -0.4621289 , -0.50522687, -0.33972281,\n",
       "        -0.43339326, -0.49369481]),\n",
       " 'split3_test_score': array([-0.71261364, -0.71132719, -0.70837191, -0.71568811, -0.71139681,\n",
       "        -0.71847364, -0.74018722, -0.7242842 , -0.71376698, -0.72815031,\n",
       "        -0.70949625, -0.71775742]),\n",
       " 'split3_train_score': array([-0.59196504, -0.59622647, -0.60225705, -0.47313786, -0.50182667,\n",
       "        -0.52842223, -0.37427199, -0.45235348, -0.49293874, -0.33982665,\n",
       "        -0.42680209, -0.48371637]),\n",
       " 'split4_test_score': array([-0.69397313, -0.6922255 , -0.69572155, -0.70467086, -0.71243258,\n",
       "        -0.69349284, -0.70903161, -0.7071875 , -0.69111459, -0.71937807,\n",
       "        -0.70490884, -0.69503195]),\n",
       " 'split4_train_score': array([-0.59562042, -0.60237799, -0.61157719, -0.48120786, -0.51335121,\n",
       "        -0.54144348, -0.38905038, -0.4518417 , -0.498306  , -0.3373651 ,\n",
       "        -0.42738996, -0.49274101]),\n",
       " 'std_fit_time': array([ 0.23781284,  0.02097049,  0.00885431,  0.02612736,  0.02469494,\n",
       "         0.02423557,  0.01360297,  0.04589559,  0.01744251,  0.02069397,\n",
       "         0.06074999,  0.36049914]),\n",
       " 'std_score_time': array([ 0.01097994,  0.00660298,  0.00120008,  0.00080005,  0.00048996,\n",
       "         0.00491531,  0.00135647,  0.00263819,  0.0004899 ,  0.00048994,\n",
       "         0.00080001,  0.00257677]),\n",
       " 'std_test_score': array([ 0.01327502,  0.01309708,  0.00975734,  0.01505687,  0.01395021,\n",
       "         0.01300587,  0.0214098 ,  0.01828756,  0.01136065,  0.02150653,\n",
       "         0.00729309,  0.0135215 ]),\n",
       " 'std_train_score': array([ 0.0040634 ,  0.0040217 ,  0.00430511,  0.00388414,  0.00583745,\n",
       "         0.00479679,  0.00773027,  0.00418271,  0.00568415,  0.00221342,\n",
       "         0.0035036 ,  0.0037903 ])}"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.689599 using {'max_depth': 3, 'min_child_weight': 3}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n6zWLTQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1cb85dd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_1.best_score_, gsearch2_1.best_params_))\n",
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig('max_depth_vs_min_child_weght_1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 也可以用xgboost自带的CV做参数调优，后期可以尝试一下。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
